ODBC를 사용하여 DB에 저장된 데이터를 검색하여 불러오기

 

ODBC를 사용하여 DB를 연결하였을 경우 사용자가 원하는 데이터를 DB에서 불러오고 싶을 것이다. 이 때는 다음과 같이 사용한다.

 

SQL문을 사용하여 검색을 사용하는 경우 DB종류마다 형식이 다르기 때문에 DB의 SQL문을 어느 정도 사용할 줄 알아야 한다.

 

 

1)      데이터베이스 구성은 편집기|SQL연결설정을 참조한다.

2)      화면을 구성한다. 다음 예는 검색 버튼을 사용하여 원하는 데이터를 보여주는 화면이다.

 

 

위의 화면 구성에 대한 자세한 내용은 ‘ODBC연결 SQL사용 여러줄 레코드 보이기’를 참조한다. 바뀐 내용은 위의 ‘검색’ 버튼이 참조내용에서는 ‘처음 불러오기’ 버튼으로 바뀌고, 검색할 필드 스트링 태그(SEARCHNAME)와 검색할 값(SEARCH)이 추가된 것이 다르다.

 

위의 화면에 대한 설명

 

DB에서 원하는 데이터를 찾고자 한다. 찾을 조건은 검색할 필드명의 스트링 태그에  DB의 필드 명을 입력하고 이 필드 명에 해당하는 데이터를 주게 되면 된다. (예를 들어, DB의 필드 명이 YMD(날짜태그)이고, 찾을 날짜는 2000/11월로 시작되는 모든 레코드라고 정의하면 검색할 필드 명의 SEARCHNAME에는 YMD 라고 입력하고, 검색할 값의 SEARCH에는 2000/11%라고 써주면 된다.)

%는 DB의 Query문에서 사용하는 문자로서 행당 DB의 Query를 참조하세요.

 

 

1)      위와 같이 화면을 구성하였다면 검색버튼에 다음과 같이 스크립트를 작성한다.

 

@sprintf($YMD,"%s","");

@sprintf($AI01,"%s","");

@sprintf($AI02,"%s","");  //검색하기 전에 일단 검색할 내용을 저장할 버퍼들을 CLEAR시킨다.

 

@sprintf(bufwhere,"%s Like '%s'",$SEARCHNAME,$SEARCH); //bufwhere라는 버퍼에 DB SQL에서 사용할 WHERE절을 저장한다.

 

id=@SQLConnect("autobase","",""); // DB와 연결한다.

@SQLSelect(id,"table1","bindlist",bufwhere,""); // 위에서 저장한 bufwhere의 내용을 조건절로 하여 DB의 데이터를 불러온다.

 

////

@SQLLast(id);

$LASTPOS=@SQLGetPos(id);

share=$LASTPOS/3;

remaind=$LASTPOS%3;

 

if(remaind != 2) {

$TOTALPAGE = share+1;

}

if(remaind == 2)

{

$TOTALPAGE = share;

}

if($LASTPOS == 0)

{

$TOTALPAGE = 1;

}

// 이사이의 문장은 검색한 데이터들의 전체페이지를 나타낸다. ( 만약, 3개의 레코드를 1페이지로 하였을 경우)

////

 

/////

@SQLFirst(id);

 

for(i=1; i<=3; i=i+1){

   

    $POS=@SQLGetPos(id);

    @sprintf(buf1,"YMD_%02d",i);

    @sprintf(buf2,"AI01_%02d",i);   

    @sprintf(buf3,"AI02_%02d",i);   

  

    if( $POS == $LASTPOS ){

       count=count+1;

     }

  

    @SetTagValue(buf1,$YMD); 

    @SetTagValue(buf2,$AI01); 

    @SetTagValue(buf3,$AI02); 

 

    if (count >1 ){

    @SetTagValue(buf1,""); 

    @SetTagValue(buf2,0); 

    @SetTagValue(buf3,0); 

    }

 

    @SQLNext(id);

}

 

/////  다음 내용은 YMD_01,YMD_02,YMD_03, AI01_01, AI01_02, AI01_03, AI02_01, AI02_02, AI02_03,의 태그에 처음레코드부터 3개의 레코드를 차례로 저장하게 된다.

 

$PAGE=1;

@SQLDisconnect(id);

 

 

2)      다음에는   버튼에 다음과 같이 스크립트를 작성한다.

다음 프로그램은 전페이지의 3개의 레코드를 보여주는 프로그램이다.

 

 

f($PAGE <=1 ) return;

@sprintf(bufwhere,"%s Like '%s'",$SEARCHNAME,$SEARCH);

 

id=@SQLConnect("autobase","","");

@SQLSelect(id,"table1","bindlist",bufwhere,"");

$PAGE=$PAGE-1;

@SQLSetPos(id,($PAGE-1)*3);

 

 

for(i=1; i<=3; i=i+1){

 

    @sprintf(buf1,"YMD_%02d",i);

    @sprintf(buf2,"AI01_%02d",i);   

    @sprintf(buf3,"AI02_%02d",i);   

  

    @SetTagValue(buf1,$YMD); 

    @SetTagValue(buf2,$AI01); 

    @SetTagValue(buf3,$AI02); 

 

    @SQLNext(id);

    $POS=@SQLGetPos(id);

      

 }

 

$POS=$POS-1;    // 현재 보여지는 레코드의 마지막 위치를 나타낸다.

@SQLDisconnect(id);

 

 

3)      다음에는   버튼에 다음과 같이 스크립트를 작성한다.

 

다음 프로그램은 다음 3개의 레코드를 보여주는 프로그램이다.

 

if($PAGE >= $TOTALPAGE ) return;

@sprintf(bufwhere,"%s Like '%s'",$SEARCHNAME,$SEARCH);

 

id=@SQLConnect("autobase","","");

@SQLSelect(id,"table1","bindlist",bufwhere,"");

@SQLSetPos(id,$PAGE*3);

$PAGE=$PAGE+1;

 

for(i=1; i<=3; i=i+1){

 

    $POS=@SQLGetPos(id);

 

    @sprintf(buf1,"YMD_%02d",i);

    @sprintf(buf2,"AI01_%02d",i);   

    @sprintf(buf3,"AI02_%02d",i);   

  

    @SetTagValue(buf1,$YMD); 

    @SetTagValue(buf2,$AI01); 

    @SetTagValue(buf3,$AI02); 

 

    

    if( $POS == $LASTPOS) count=count+1;

   

    if(count>1){    

      

         @SetTagValue(buf1,""); 

         @SetTagValue(buf2,0); 

         @SetTagValue(buf3,0); 

     }

    @SQLNext(id);    

   

}

 

 

@SQLDisconnect(id);